kafka 集群

前言

kafka 集群搭建。

搭建环境

  1. jdk 1.8.0_161
  2. zookeeper-3.4.9
  3. kafka-1.1.0
  4. 同一网段的三台虚拟机:192.168.1.111, 192.168.1.112, 192.168.1.113

集群配置

broker.id属性是当前机器在集群中的唯一标识,和zookeeper的myid性质一样。

192.168.1.111

# 集群唯一标识
broker.id=1
# 每个topic默认的分区数
num.partitions=3
# zk集群配置
zookeeper.connect=192.168.1.111:2181,192.168.1.112:2181,192.168.1.113:2181

192.168.1.112

# 集群唯一标识
broker.id=2
# 每个topic默认的分区数
num.partitions=3
# zk集群配置
zookeeper.connect=192.168.1.111:2181,192.168.1.112:2181,192.168.1.113:2181

192.168.1.113

# 集群唯一标识
broker.id=3
# 每个topic默认的分区数
num.partitions=3
# zk集群配置
zookeeper.connect=192.168.1.111:2181,192.168.1.112:2181,192.168.1.113:2181

配置完成之后,一一启动集群中各broker即可。

集群状态

通过在集群中创建一个新的topic,来查看该topic在集群中的分区,复制等情况。

创建3分区-1副本的topic

[root@localhost bin]# ./kafka-topics.sh --create --zookeeper 192.168.1.111:2181,192.168.1.112:2181,192.168.1.113:2181 --replication-factor 1 --partitions 3 --topic my-replicated-topic
Created topic "my-replicated-topic".

查看my-replicated-topic集群状态

[root@localhost bin]# ./kafka-topics.sh --describe --zookeeper 192.168.1.111:2181,192.168.1.112:2181,192.168.1.113:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:3 ReplicationFactor:1 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 3 Replicas: 3 Isr: 3
Topic: my-replicated-topic Partition: 1 Leader: 1 Replicas: 1 Isr: 1
Topic: my-replicated-topic Partition: 2 Leader: 2 Replicas: 2 Isr: 2
节点类型 职责描述
leader 每个分区都有一个leader,负责该分区所有的读写及同步操作
replicas 副本集,作为数据冗余备份而存在
in-sync replicas 副本集中数据紧跟leader的节点列表,是动态变化的,当某副本数据落后leader太多时,将被移出in-sync,作为候选leader而存在

遇到的问题

InconsistentBrokerIdException 启动异常

[2018-05-01 02:12:52,559] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentBrokerIdException: Configured broker.id 1 doesn't match stored broker.id 0 in meta.properties. If you moved your data, make sure your configured broker.id matches. If you intend to create a new broker, you should remove all data in your data directories (log.dirs).
at kafka.server.KafkaServer.getBrokerIdAndOfflineDirs(KafkaServer.scala:670)
at kafka.server.KafkaServer.startup(KafkaServer.scala:209)
at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
at kafka.Kafka$.main(Kafka.scala:92)
at kafka.Kafka.main(Kafka.scala)
[2018-05-01 02:12:52,559] INFO shutting down (kafka.server.KafkaServer)

问题原因:修改了broker.id的值导致的,启动时发现和meta.properties中的值不一致抛出异常,启动失败。

解决办法:找到配置文件中log.dirs所在位置,修改meta.properties文件中broker.id的值保持一致。

[root@localhost kafka-logs]# cd /tmp/kafka-logs
[root@localhost kafka-logs]# ll
total 4
-rw-r--r--. 1 root root 0 May 1 02:01 cleaner-offset-checkpoint
-rw-r--r--. 1 root root 0 May 1 02:01 log-start-offset-checkpoint
-rw-r--r--. 1 root root 54 May 1 02:01 meta.properties
-rw-r--r--. 1 root root 0 May 1 02:01 recovery-point-offset-checkpoint
-rw-r--r--. 1 root root 0 May 1 02:01 replication-offset-checkpoint

修改完成之后,重新启动服务即可。

参考链接

  1. https://kafka.apache.org/quickstart
  2. https://github.com/huangqian/note/blob/master/Kafka/kafka_quick_start.md